// src/test/util_test.cpp
#include <iostream>
#include <fstream>
#include <jsoncpp/json/json.h>
#include "../util.hpp" // 包含我们刚刚实现的工具类

using namespace aod;

// 定义测试文件路径
#define TEST_FILE "./temp_test_file.txt" 
#define TEST_DIR "./temp_test_dir"

void TestFileUtil() {
    std::cout << "--- Testing FileUtil ---" << std::endl;
    
    // 1. 测试目录创建
    FileUtil dir_util(TEST_DIR);
    if (!dir_util.CreateDirectory()) {
        std::cerr << "Error: CreateDirectory failed!" << std::endl;
        return;
    }
    std::cout << "Directory " << TEST_DIR << " created/exists." << std::endl;

    // 2. 测试文件写入
    FileUtil file_util(TEST_FILE);
    const std::string content_to_write = "Hello, C++ World. 这是一个中文测试。";
    if (!file_util.SetContent(content_to_write)) {
        std::cerr << "Error: SetContent failed!" << std::endl;
        return;
    }
    std::cout << "File written. Size: " << file_util.FileSize() << " bytes." << std::endl;
    
    // 3. 测试文件读取
    std::string content_read;
    if (!file_util.GetContent(content_read)) {
        std::cerr << "Error: GetContent failed!" << std::endl;
        return;
    }
    
    // 4. 验证内容
    if (content_read == content_to_write) {
        std::cout << "File I/O Test: SUCCESS!" << std::endl;
        // std::cout << "Content: " << content_read << std::endl;
    } else {
        std::cerr << "Error: Content mismatch!" << std::endl;
    }
    
    // 5. 清理 (删除文件和目录)
    unlink(TEST_FILE); // C API: 删除文件
    rmdir(TEST_DIR);   // C API: 删除目录
    std::cout << "Cleanup done." << std::endl;
}

void TestJsonUtil() {
    std::cout << "\n--- Testing JsonUtil ---" << std::endl;
    
    // 1. 构造 Json 对象 (输入)
    Json::Value root;
    root["id"] = 99;
    root["name"] = "视频点播系统";
    root["status"] = true;
    
    // 2. 序列化 (Json -> String)
    std::string json_str;
    if (!JsonUtil::Serialize(root, json_str)) {
        std::cerr << "Error: Serialize failed!" << std::endl;
        return;
    }
    std::cout << "Serialized: " << json_str << std::endl;
    
    // 3. 反序列化 (String -> Json)
    Json::Value root2;
    if (!JsonUtil::UnSerialize(root2, json_str)) {
        std::cerr << "Error: UnSerialize failed!" << std::endl;
        return;
    }
    
    // 4. 验证内容
    if (root2["id"].asInt() == 99 && root2["name"].asString() == "视频点播系统") {
        std::cout << "Json I/O Test: SUCCESS!" << std::endl;
    } else {
        std::cerr << "Error: Json content mismatch!" << std::endl;
    }
}

int main() {
    TestFileUtil();
    TestJsonUtil();
    return 0;
}